package main

import "fmt"

func main() {
	/*
	 * 匿名函数同样被称为闭包，
	 * 简单来说闭包允许调用定义在其他环境变量下的变量，可使得某个函数捕捉到一些外部状态，
	 * 例如函数被创建时的状态。一个闭包继承了函数声明时的作用域。
	 */
	fmt.Printf("%d\n", Add()(3))
	fmt.Printf("%d\n", Add2(6)(3))
}

// Add 无参函数，返回值是一个匿名函数，匿名函数返回一个int类型的值
func Add() func(b int) int {
	return func(b int) int {
		return b + 2
	}
}

// Add2 接收一个int类型参数，返回一个匿名函数，匿名函数返回一个int类型的值
func Add2(a int) func(b int) int {
	return func(b int) int {
		return a + b
	}
}
